#ifndef xpack_define_classify
#define xpack_define_classify
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::define_classify::inc
#include"macro/xexport.hpp"
#include"meta/is_the_xstruct.hpp"
#pragma pop_macro("xuser")

namespace mixc::define_classify::origin{
    enum class classify_t{
        chrono_date,
        chrono_datetime,
        chrono_now,
        chrono_now_utc,
        chrono_time,

        dumb_secret_type,

        extern_rtos_private_timer_conf,
        extern_rtos_task_conf,

        graphic_box_layer_ui_panel,
        graphic_box_layer_ui_table,
        graphic_box_layer_ui_tablecell,
        graphic_rgbxx,
        graphic_bgrxx,

        lang_cxx,

        interface_ranger,
        interface_seqptr,

        utils_mix_item,
        utils_stream_wrapper,
    };

    template<class type_t>
    concept is_date = inc::is_the_xstruct<classify_t::chrono_date, type_t>;

    template<class type_t>
    concept is_datetime = inc::is_the_xstruct<classify_t::chrono_datetime, type_t>;

    template<class type_t>
    concept is_now = inc::is_the_xstruct<classify_t::chrono_now, type_t>;

    template<class type_t>
    concept is_now_utc = inc::is_the_xstruct<classify_t::chrono_now_utc, type_t>;

    template<class type_t>
    concept is_nowxx = is_now<type_t> or is_now_utc<type_t>;

    template<class type_t>
    concept is_time = inc::is_the_xstruct<classify_t::chrono_time, type_t>;

    template<class type_t>
    concept is_secret_type = inc::is_the_xstruct<classify_t::dumb_secret_type, type_t>;

    template<class type_t> concept is_ui_panel = inc::is_the_xstruct<classify_t::graphic_box_layer_ui_panel, type_t>;
    template<class type_t> concept is_ui_table = inc::is_the_xstruct<classify_t::graphic_box_layer_ui_table, type_t>;
    template<class type_t> concept is_ui_tablecell = inc::is_the_xstruct<classify_t::graphic_box_layer_ui_tablecell, type_t>;

    template<class type_t>
    concept is_cxx = inc::is_the_xstruct<classify_t::lang_cxx, type_t>;

    template<class type_t>
    concept is_ranger = inc::is_the_xstruct<classify_t::interface_ranger, type_t>;

    template<class type_t>
    concept is_seqptr = inc::is_the_xstruct<classify_t::interface_seqptr, type_t>;

    template<class type_t>
    concept is_mix_item = inc::is_the_xstruct<classify_t::utils_mix_item, type_t>;

    template<class type_t>
    concept is_stream_wrapper = inc::is_the_xstruct<classify_t::utils_stream_wrapper, type_t>;
}

#endif

xexport_space(mixc::define_classify::origin)